#include<iostream>
#include<algorithm>

using namespace std;

const int N=6010;

int n;
int happy[N];
int h[N],e[N],ne[N],idx;
int dp[N][2];
bool father[N];


void add(int a,int b)
{
	e[idx]=b;
	ne[idx]=h[a];
	h[a]=idx++;
}


void dfs(int u)
{
	dp[u][1]=happy[u];
	
	for(int i=h[u];i!=-1;i=ne[i]){
		int j=e[i];
		dfs(j);
		dp[u][0]+=max(dp[j][0],dp[j][1]);
		dp[u][1]+=dp[j][0];
	}
}


int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&happy[i]);
	
	fill(h,h+N,-1);
	for(int i=0;i<n-1;i++){
		int a,b;
		scanf("%d%d",&a,&b);
		father[a]=true;
		add(b,a);
	}
	
	int root=1;
	while(father[root]) root++;
	
	dfs(root);
	
	printf("%d",max(dp[root][0],dp[root][1]));
	
	return 0;
}
